home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
MYMUD21.ZIP
/
MMUD21.ZIP
/
SOURCE
/
11_STUFF.ZIP
/
ML_IO.ZIP
/
VGAFONT.PAS
< prev
Wrap
Pascal/Delphi Source File
|
1992-10-12
|
2KB
|
99 lines
Unit VGAFont;
Interface
Uses Dos,Crt;
Function IsVGAorEGA:Boolean;
Procedure ResetVGAfont;
Function LoadVGAFont(FileName : ComStr):Boolean;
Implementation
Var SetSize : Word;
Points : Byte;
OrigMode: Integer;
CharSet : Pointer;
ExitSAve: Pointer;
FirstChange : Boolean;
{$F+}
Procedure ResetVGAfont;
{$F-}
Var Regs : Registers;
Begin
ExitProc:=ExitSave;
If CharSet<>NIL
Then Begin
FreeMem(CharSet,SetSize);
CharSet:=NIL;
End;
With Regs Do
Begin
AX := $1104;
BL := 0; (* load to block 0 *)
Intr($10,Regs);
End; {With}
End;
Function LoadVGAFont(FileName : ComStr):Boolean;
Var Regs : Registers;
F : File;
Begin
LoadVGAFont:=False;
If CharSet<>NIL
Then Begin
FreeMem(CharSet,SetSize);
CharSet:=NIL;
End;
Assign(F,FileName);
Reset(F,1);
If IoResult<>0
Then Exit;
SetSize:=FileSize(F);
GetMem(CharSet,SetSize);
BlockRead(F,CharSet^,SetSize);
Close(F);
If IoResult<>0
Then Exit;
Points:=SetSize Div 256;
With Regs Do
Begin
AX := $1100;
BH := Points; (* bytes per character *)
BL := 0; (* load to block 0 *)
CX := 256; (* 256 characters *)
DX := 0; (* start with character 0 *)
ES := Seg(CharSet^); (* segment of table *)
BP := Ofs(CharSet^); (* offset of the table *)
Intr($10,Regs);
End; {With}
LoadVGAFont:=True;
End;
Function IsVGAorEGA:Boolean;
Var Regs : Registers;
Begin
With REgs Do
Begin
AX:=$1007;
BX:=$0000;
Intr($10,Regs);
IsVGAorEGA:=(Regs.Flags and FCarry)<>FCarry;
End; {With}
End;
Var Regs : Registers;
Begin
ExitSave:=ExitProc;
ExitProc:=@ResetVGAFont;
CharSet:=Nil;
OrigMode:=LastMode;
Regs.AX := $0500; (* make sure that it's page 0 *)
Intr($10,Regs);
Regs.AX := 3; (* must set the vdo mode first *)
Intr($10,Regs);
End.